package com.ftg.learn.chapter8.pattern.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 法院
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/8/4 上午8:49
 */
public class Court {

    public Court() {
        System.out.println("111");
    }

    //动态代理  ：

    //反射机制  ：

    public static void main(String[] args) {

//        spring aop 底层实现

        //动态代理  o 是Sayinterface接口的父类
//        Sayinterface 的实现类的实例 向上转型成了 Object  向下转型
        Sayinterface o = (Sayinterface)Proxy.newProxyInstance(
                Sayinterface.class.getClassLoader(),
                new Class[]{Sayinterface.class},
                (proxy, method, args1) -> {
                    System.out.println('a');
                    return proxy;
                }
        );

        Sayinterface o1 = (Sayinterface)Proxy.newProxyInstance(
                //类加载器
                Sayinterface.class.getClassLoader()
                //哪个类生成代码
                , new Class[]{Sayinterface.class}
                //动态生成相应的方法
                , (x, y, z) -> {
                    System.out.println("你好我是你的律师 ");
                    System.out.println("我帮你说话");

                    return x;
                });
        o1.say();


//        反映
//        new Court();
//        Defendant d = new Defendant();
//        d.setName("张三丰");
//
//
//        Sayinterface say = new LawyerProxy(d);
//        say.say();
//
//
//        Sayinterface say1 = new Defendant();
//        say1.say();
    }

}
